package com.sg.dto.biz.bff.common;

import com.wicket.okrbff.common.annotations.TreeType;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.Objects;


/**
 * @desc BffNextLevelTargetObjDto
 * @使用场景
 */
@Data
public class BffNextLevelTargetObjDto implements Serializable {

    /**
     * 指标ID
     */
    @ApiModelProperty("指标ID")
    private String objectiveId;

    /**
     * 归属父级指标ID
     */
    @TreeType("fid")
    @ApiModelProperty("归属父级指标ID")
    private String parentObjectiveId;

    /**
     * 指标标识
     */
    @ApiModelProperty("指标标识")
    private String objectiveCode;

    /**
     * 是否末级指标 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否末级指标")
    private String isLastObjective;

    /**
     * 层级
     */
    @ApiModelProperty("层级")
    private Long levelNumber;

    /**
     * 虚拟组织下部门ID
     */
    @ApiModelProperty("牵头部门ID")
    private String deptId;

    /**
     * 部门简称
     */
    @ApiModelProperty("牵头部门简称")
    private String deptShortName;

    /**
     * 个人账号
     */
    @ApiModelProperty("牵头人个人账号ID")
    private String userId;

    /**
     * 真实姓名
     */
    @ApiModelProperty("责任人真实姓名")
    private String idCardName;

    /**
     * 用户昵称
     */
    @ApiModelProperty("责任人昵称")
    private String nickName;

    /**
     * 指标名称
     */
    @ApiModelProperty("指标名称")
    private String objectiveName;

    /**
     * 指标简称
     */
    @ApiModelProperty("指标简称")
    private String objectiveShortName;

    /**
     * 主体生命周期 CURRENTLY_VALID:当前有效 EDITING:正在编辑 ARCHIVING:历史存档
     */
    @ApiModelProperty("主体生命周期")
    private String subjectLifeCycle;
    /**
     * 冗余目标ID
     */
    @ApiModelProperty("冗余目标ID")
    private String targetId;

    /**
     * 责任主体ID
     */
    @ApiModelProperty("责任主体ID ")
    private String dutyBodyId;

    /**
     * 责任主体名称
     */
    @ApiModelProperty("责任主体名称 ")
    private String dutyBodyName;
    /**
     * 责任主体类型 PERSONAL:个人 DEPT:部门
     */
    @ApiModelProperty("责任主体类型")
    private String respBodyType;
    /**
     * 关联末级目标分类ID
     */
    @ApiModelProperty("关联末级目标分类ID")
    private String correlationLastTargetCatId;

    /**
     * 冗余指标模板ID
     */
    @ApiModelProperty("冗余指标模板ID")
    private String objectiveTemplateId;

    /**
     * 冗余指标业务类型 NUMBER_GROWTH:数量增长型 NUMBER_DECLINE:数量降幅型 PERCENTAGE_GROWTH:百分比增长型 PERCENTAGE_DECLINE:百分比降幅型 PROGRESS:进度型 RATIO_GROWTH:比率增长型 RATIO_DECLINE:比率降幅型 SUBJECTIVE_QUALITATIVE:主观定性
     */
    @ApiModelProperty("冗余指标业务类型")
    private String targetValueType;

    /**
     * 指标模板名称
     */
    @ApiModelProperty("指标模板名称")
    private String objectiveTemplateName;

    /**
     * 排序
     */
    @ApiModelProperty("排序")
    private Long orderNumber;

    /**
     * 批次下更新状态 NEW:本次新增 UNCHANGED:正常未变 REVISION:本次修订 ARCHIVE:本次存档
     */
    @ApiModelProperty("批次下更新状态")
    private String updateStatus;

    /**
     * 周期模式类型编码 FATHER_SON_CYCLE:父子周期 SINGLE_CYCLE:单周期 IRREGULAR_CYCLE:不规则周期
     */
    @ApiModelProperty("周期模式类型编码")
    private String periodicModeTypeCode;

    /**
     * 被评对象目标周期ID
     */
    @ApiModelProperty("被评对象目标周期ID")
    private String evaObjTargetCycleId;

    /**
     * 周期名称
     */
    @ApiModelProperty("周期名称")
    private String cycleStandardName;

    /**
     * 周期类型实例简称
     */
    @ApiModelProperty("周期类型实例简称")
    private String cycleNumberShortName;

    /**
     * 权重
     */
    @ApiModelProperty("权重")
    private Double weightValue;

    /**
     * 权重分值
     */
    @ApiModelProperty("权重分值")
    private Double weightScore;

    /**
     * 诊断值
     */
    @ApiModelProperty("诊断值")
    private Double targetDiagnosticValue;

    /**
     * 冗余单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率 SET:套 TIMES:次 PART:部 NNT:人
     */
    @ApiModelProperty("冗余单位")
    private String unit;

    /**
     * 冗余数字单位
     */
    @ApiModelProperty("冗余数字单位")
    private Double digitalUnit;

    /**
     * 组织内部门身份名称
     */
    @ApiModelProperty("组织内部门身份名称")
    private String virtualOrgDeptStatus;

    /**
     * 责任人就职记录ID
     */
    @ApiModelProperty("责任人就职记录ID")
    private String dutyInaugurationId;

    /**
     * 责任人姓名
     */
    @ApiModelProperty("责任人姓名")
    private String dutyInaugurationName;

    /**
     * 责任人昵称
     */
    @ApiModelProperty("责任人昵称")
    private String dutyInaugurationNickName;

    /**
     * 责任人组内职务名称
     */
    @ApiModelProperty("责任人组内职务名称")
    private String dutyPostName;

    /**
     * 主管就职记录ID
     */
    @ApiModelProperty("主管就职记录ID")
    private String directorInaugurationId;

    /**
     * 主管姓名
     */
    @ApiModelProperty("主管姓名")
    private String directorName;

    /**
     * 主管昵称
     */
    @ApiModelProperty("主管昵称")
    private String directorNickName;

    /**
     * 主管组内职务名称
     */
    @ApiModelProperty("主管组内职务名称")
    private String directorPostName;
    /**
     * 本级是否向下分工 TRUE:是 FALSE:否
     */
    @ApiModelProperty("本级是否向下分工")
    private String createLowerIndicator;
    /**
     * 责任人虚拟组织成员ID
     */
    @ApiModelProperty("责任人虚拟组织成员ID")
    private String dutyVirtualOrgMemberId;

    /**
     * 主管虚拟组织成员ID
     */
    @ApiModelProperty("主管虚拟组织成员ID")
    private String directorVirtualOrgMemberId;
    /**
     * 是否已完成 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否已完成")
    private String isComplete;
    /**
     * 目标值
     */
    @ApiModelProperty("目标值")
    private Double targetValue;
    /**
     * 目标周期简称
     */
    @ApiModelProperty("目标周期简称")
    private String cyclelAlias;
    /**
     * 责任人虚拟组织成员ID
     */
    @ApiModelProperty("责任人虚拟组织成员ID")
    private String principalVirtualOrgMemberId;

    /**
     * 责任人就职记录ID
     */
    @ApiModelProperty("责任人就职记录ID")
    private String principalInaugurationId;

    /**
     * 责任人头像
     */
    @ApiModelProperty("责任人头像")
    private String principalUserFace;

    /**
     * 责任人姓名
     */
    @ApiModelProperty("责任人姓名")
    private String principalInaugurationName;

    /**
     * 责任人昵称
     */
    @ApiModelProperty("责任人昵称")
    private String principalInaugurationNickName;

    /**
     * 责任人组内职务名称
     */
    @ApiModelProperty("责任人组内职务名称")
    private String principalPostName;
    /**
     * 责任人姓名
     */
    @ApiModelProperty("责任人姓名")
    private String principalIdCardName;

    /**
     * 责任人昵称
     */
    @ApiModelProperty("责任人昵称")
    private String principalNickName;

    /**
     * 责任人组内职务名称
     */
    @ApiModelProperty("责任人组内职务名称")
    private String principalVirtualOrganizationPosition;

    /**
     * 主管姓名
     */
    @ApiModelProperty("主管姓名")
    private String directorIdCardName;

    /**
     * 主管组内职务名称
     */
    @ApiModelProperty("主管组内职务名称")
    private String directorVirtualOrganizationPosition;
    /**
     * 是否用于一级部门 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否用于一级部门")
    private String isUseFirstDept;
    /**
     * 是否开启自定义汇报 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否开启自定义汇报")
    private String isOpenCustomReport;
    /**
     * 部门排序
     */
    @ApiModelProperty("部门排序")
    private Long dutyBodyOrderNum;

    /**
     * 个人排序
     */
    @ApiModelProperty("个人排序")
    private Long personalOrderNumber;

    /**
     * 权重排序
     */
    @ApiModelProperty("权重排序")
    private Long weightOrderNumber;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private Date createTime;

    /**
     * 操作时间
     */
    @ApiModelProperty("操作时间")
    private Date operateTime;
    /**
     * 是否开启预算 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否开启预算")
    private String isUseBudget;
    /**
     * 指标编号
     */
    @ApiModelProperty("指标编号")
    private String objectiveNumber;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        BffNextLevelTargetObjDto that = (BffNextLevelTargetObjDto) o;
        return objectiveId == that.objectiveId && parentObjectiveId == that.parentObjectiveId && objectiveCode == that.objectiveCode && isLastObjective == that.isLastObjective && levelNumber == that.levelNumber && deptId == that.deptId && deptShortName == that.deptShortName && userId == that.userId && idCardName == that.idCardName && nickName == that.nickName && objectiveName == that.objectiveName && objectiveShortName == that.objectiveShortName && subjectLifeCycle == that.subjectLifeCycle && targetId == that.targetId && dutyBodyId == that.dutyBodyId && dutyBodyName == that.dutyBodyName && respBodyType == that.respBodyType && correlationLastTargetCatId == that.correlationLastTargetCatId && objectiveTemplateId == that.objectiveTemplateId && targetValueType == that.targetValueType && objectiveTemplateName == that.objectiveTemplateName && orderNumber == that.orderNumber && updateStatus == that.updateStatus && periodicModeTypeCode == that.periodicModeTypeCode && evaObjTargetCycleId == that.evaObjTargetCycleId && cycleStandardName == that.cycleStandardName && cycleNumberShortName == that.cycleNumberShortName && weightValue == that.weightValue && weightScore == that.weightScore && targetDiagnosticValue == that.targetDiagnosticValue && unit == that.unit && digitalUnit == that.digitalUnit && virtualOrgDeptStatus == that.virtualOrgDeptStatus && dutyInaugurationId == that.dutyInaugurationId && dutyInaugurationName == that.dutyInaugurationName && dutyInaugurationNickName == that.dutyInaugurationNickName && dutyPostName == that.dutyPostName && directorInaugurationId == that.directorInaugurationId && directorName == that.directorName && directorNickName == that.directorNickName && directorPostName == that.directorPostName && createLowerIndicator == that.createLowerIndicator && dutyVirtualOrgMemberId == that.dutyVirtualOrgMemberId && directorVirtualOrgMemberId == that.directorVirtualOrgMemberId && isComplete == that.isComplete && targetValue == that.targetValue && cyclelAlias == that.cyclelAlias && principalVirtualOrgMemberId == that.principalVirtualOrgMemberId && principalInaugurationId == that.principalInaugurationId && principalUserFace == that.principalUserFace && principalInaugurationName == that.principalInaugurationName && principalInaugurationNickName == that.principalInaugurationNickName && principalPostName == that.principalPostName && principalIdCardName == that.principalIdCardName && principalNickName == that.principalNickName && principalVirtualOrganizationPosition == that.principalVirtualOrganizationPosition && directorIdCardName == that.directorIdCardName && directorVirtualOrganizationPosition == that.directorVirtualOrganizationPosition && isUseFirstDept == that.isUseFirstDept && isOpenCustomReport == that.isOpenCustomReport && dutyBodyOrderNum == that.dutyBodyOrderNum && personalOrderNumber == that.personalOrderNumber && weightOrderNumber == that.weightOrderNumber && createTime == that.createTime && operateTime == that.operateTime && isUseBudget == that.isUseBudget && objectiveNumber == that.objectiveNumber;
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), objectiveId, parentObjectiveId, objectiveCode, isLastObjective, levelNumber, deptId, deptShortName, userId, idCardName, nickName, objectiveName, objectiveShortName, subjectLifeCycle, targetId, dutyBodyId, dutyBodyName, respBodyType, correlationLastTargetCatId, objectiveTemplateId, targetValueType, objectiveTemplateName, orderNumber, updateStatus, periodicModeTypeCode, evaObjTargetCycleId, cycleStandardName, cycleNumberShortName, weightValue, weightScore, targetDiagnosticValue, unit, digitalUnit, virtualOrgDeptStatus, dutyInaugurationId, dutyInaugurationName, dutyInaugurationNickName, dutyPostName, directorInaugurationId, directorName, directorNickName, directorPostName, createLowerIndicator, dutyVirtualOrgMemberId, directorVirtualOrgMemberId, isComplete, targetValue, cyclelAlias, principalVirtualOrgMemberId, principalInaugurationId, principalUserFace, principalInaugurationName, principalInaugurationNickName, principalPostName, principalIdCardName, principalNickName, principalVirtualOrganizationPosition, directorIdCardName, directorVirtualOrganizationPosition, isUseFirstDept, isOpenCustomReport, dutyBodyOrderNum, personalOrderNumber, weightOrderNumber, createTime, operateTime, isUseBudget, objectiveNumber);
    }


}
   